<?php

namespace SGBD\Controller;

class ResultatsController extends \SGBD\AbstractController
{
    public function indexAction()
    {
        $get = $this->app->request()->get();
        $date = isset($get['date']) ? $get['date'] : FALSE;
        $categorie = isset($get['categorie']) ? $get['categorie'] : FALSE;

        $dates = $this->db->getDatesCategorie($categorie);
        $matches = array();
        foreach ($dates as $date) {
            $date = $date['Date_Rencontre'];
            $matches[$date] = $this->db->getAllMatches($categorie, $date);
            $matches[$date] = $this->linkRencontres($matches[$date]);
            foreach ($matches[$date] as &$m) {
                $m['Score_Locaux'] = reset(
                    $this->db->getScoreEquipe($m['Numero_Equipe_Visiteur'], $m['Numero_Rencontre'])
                ) ?: 0;
                $m['Score_Visiteurs'] = reset(
                    $this->db->getScoreEquipe($m['Numero_Equipe_Domicile'], $m['Numero_Rencontre'])
                ) ?: 0;
            }
        }

        $categories = $this->db->getAllCategories();
        $this->app->render(
            'resultat/index.html',
            array(
                'date' => $date,
                'categorie' => $categorie,
                'categories' => $categories,
                'matches' => $matches
            )
        );
    }

    public function newAction()
    {
        $equipes = $this->db->getAllEquipes('Nom_Equipe', FALSE);
        $equipes = $this->equipesToOptions($equipes);
        $this->app->render(
            'resultat/new.html',
            array('equipes' => $equipes)
        );
    }

    public function viewAction($numeroRencontre)
    {
        $rencontre = $this->db->getRencontre($numeroRencontre);
        $eqVisNum = $rencontre['Numero_Equipe_Visiteur'];
        $eqDomNum = $rencontre['Numero_Equipe_Domicile'];
        $equipeVisiteur = $this->db->getEquipe($eqVisNum);
        $equipeDomicile = $this->db->getEquipe($eqDomNum);

        $joueursVisiteur = $this->db->getAllJoueursParEquipe($eqVisNum, FALSE);
        $joueursDomicile = $this->db->getAllJoueursParEquipe($eqDomNum, FALSE);
        $joueursPerformance = rekey(
            $this->db->getPerformanceJoueur($numeroRencontre),
            'Numero_Personne'
        );

        $scoreVisiteur = $this->db->getScoreEquipe($eqVisNum, $numeroRencontre);
        $scoreVisiteur = $scoreVisiteur['Score'] ?: 0;
        $scoreDomicile = $this->db->getScoreEquipe($eqDomNum, $numeroRencontre);
        $scoreDomicile = $scoreDomicile['Score'] ?: 0;

        $this->app->render(
            'resultat/view.html',
            array(
                'rencontre' => $rencontre,
                'equipeVisiteur' => $equipeVisiteur,
                'equipeDomicile' => $equipeDomicile,
                'joueursVisiteur' => $joueursVisiteur,
                'joueursDomicile' => $joueursDomicile,
                'joueursPerformance' => $joueursPerformance,
                'scoreDomicile' => $scoreDomicile,
                'scoreVisiteur' => $scoreVisiteur
            )
        );
    }

    public function createAction()
    {
        $post = $this->app->request()->post();

        $eq1 = $this->db->getEquipe($post['Equipe_Domicile']);
        $eq2 = $this->db->getEquipe($post['Equipe_Visiteur']);

        if ($eq1['Nom_Categorie'] !== $eq2['Nom_Categorie']) {
            throw new \InvalidArgumentException('Le categorie n\'est pas le meme.');
        }

        $rencontre = $this->db->createRencontre(
            $post['Equipe_Domicile'],
            $post['Equipe_Visiteur'],
            $post['Date_Rencontre']
        );

        // Si tout va bien...
        $url = $this->app->urlFor('resultats') . '?' . http_build_query(
            array('date' => $post['Date_Rencontre'],
                  'categorie' => $eq1['Nom_Categorie'])
        );
        $this->app->redirect($url);
    }
}